home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / multifile.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  162 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __all__ = [
  5.     'MultiFile',
  6.     'Error']
  7.  
  8. class Error(Exception):
  9.     pass
  10.  
  11.  
  12. class MultiFile:
  13.     seekable = 0
  14.     
  15.     def __init__(self, fp, seekable = 1):
  16.         self.fp = fp
  17.         self.stack = []
  18.         self.level = 0
  19.         self.last = 0
  20.         if seekable:
  21.             self.seekable = 1
  22.             self.start = self.fp.tell()
  23.             self.posstack = []
  24.         
  25.  
  26.     
  27.     def tell(self):
  28.         if self.level > 0:
  29.             return self.lastpos
  30.         
  31.         return self.fp.tell() - self.start
  32.  
  33.     
  34.     def seek(self, pos, whence = 0):
  35.         here = self.tell()
  36.         if whence:
  37.             if whence == 1:
  38.                 pos = pos + here
  39.             elif whence == 2:
  40.                 if self.level > 0:
  41.                     pos = pos + self.lastpos
  42.                 else:
  43.                     raise Error, "can't use whence=2 yet"
  44.             
  45.         
  46.         if (not None if pos <= pos else pos <= here or self.level > 0) and pos > self.lastpos:
  47.             raise Error, 'bad MultiFile.seek() call'
  48.         
  49.         self.fp.seek(pos + self.start)
  50.         self.level = 0
  51.         self.last = 0
  52.  
  53.     
  54.     def readline(self):
  55.         if self.level > 0:
  56.             return ''
  57.         
  58.         line = self.fp.readline()
  59.         if not line:
  60.             self.level = len(self.stack)
  61.             self.last = self.level > 0
  62.             if self.last:
  63.                 raise Error, 'sudden EOF in MultiFile.readline()'
  64.             
  65.             return ''
  66.         
  67.         if self.is_data(line):
  68.             return line
  69.         else:
  70.             marker = line.rstrip()
  71.         for i, sep in enumerate(reversed(self.stack)):
  72.             if marker == self.section_divider(sep):
  73.                 self.last = 0
  74.                 break
  75.                 continue
  76.             if marker == self.end_marker(sep):
  77.                 self.last = 1
  78.                 break
  79.                 continue
  80.         else:
  81.             return line
  82.         if self.seekable:
  83.             self.lastpos = self.tell() - len(line)
  84.         
  85.         self.level = i + 1
  86.         if self.level > 1:
  87.             raise Error, 'Missing endmarker in MultiFile.readline()'
  88.         
  89.         return ''
  90.  
  91.     
  92.     def readlines(self):
  93.         list = []
  94.         while None:
  95.             line = self.readline()
  96.             if not line:
  97.                 break
  98.             
  99.             continue
  100.             return list
  101.  
  102.     
  103.     def read(self):
  104.         return ''.join(self.readlines())
  105.  
  106.     
  107.     def next(self):
  108.         while self.readline():
  109.             pass
  110.         if self.level > 1 or self.last:
  111.             return 0
  112.         
  113.         self.level = 0
  114.         self.last = 0
  115.         if self.seekable:
  116.             self.start = self.fp.tell()
  117.         
  118.         return 1
  119.  
  120.     
  121.     def push(self, sep):
  122.         if self.level > 0:
  123.             raise Error, 'bad MultiFile.push() call'
  124.         
  125.         self.stack.append(sep)
  126.         if self.seekable:
  127.             self.posstack.append(self.start)
  128.             self.start = self.fp.tell()
  129.         
  130.  
  131.     
  132.     def pop(self):
  133.         if self.stack == []:
  134.             raise Error, 'bad MultiFile.pop() call'
  135.         
  136.         if self.level <= 1:
  137.             self.last = 0
  138.         else:
  139.             abslastpos = self.lastpos + self.start
  140.         self.level = max(0, self.level - 1)
  141.         self.stack.pop()
  142.         if self.seekable:
  143.             self.start = self.posstack.pop()
  144.             if self.level > 0:
  145.                 self.lastpos = abslastpos - self.start
  146.             
  147.         
  148.  
  149.     
  150.     def is_data(self, line):
  151.         return line[:2] != '--'
  152.  
  153.     
  154.     def section_divider(self, str):
  155.         return '--' + str
  156.  
  157.     
  158.     def end_marker(self, str):
  159.         return '--' + str + '--'
  160.  
  161.  
  162.